<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>Switch | AutoHotkey</title>
<meta name="description" content="The Switch statement executes one case from a list of mutually exclusive candidates." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

 <h1>Switch <span class="ver">[v1.1.31+]</span></h1>

 <p>从互斥候选项列表中执行其中一个 Case(实例).</p>

 <pre class="Syntax"><span class="func">Switch</span> <span class="optional">SwitchValue</span>
{
<span class="func">Case</span> CaseValue1:
    <i>Statements1</i>
<span class="func">Case</span> CaseValue2a, CaseValue2b:
    <i>Statements2</i>
<span class="func">Default</span>:
    <i>Statements3</i>
}</pre>

 <h2 id="Remarks">备注</h2>
<p>如果存在, 则对 <em>SwitchValue</em> 进行一次计算并与每个实例值进行比较, 直到找到匹配为止, 然后执行该实例. 否则, 将执行第一个计算为 <a href="../Concepts.htm#boolean">true</a>(非零和非空) 的实例. 如果没有匹配的实例并且存在 <code>Default</code>, 则执行它.</p>
<p><a href="StringCaseSense.htm">StringCaseSense</a> 控制由 Switch 执行的字符串比较的大小写敏感性.</p>
<p>每个实例最多可以列出 20 个值. 每个值必须是一个<a href="../Language.htm#expressions">表达式</a>, 但可以是一个原义数字, 加引号的字符串或变量. <code>Case</code> 和 <code>Default</code> 必须以冒号 <code>:</code> 终止.</p>
<p>每个实例的第一个语句可以在 <code>Case</code> 下面, 也可以在同一行, 挨着冒号. 每个实例都隐式地以下一个 <code>Case</code>/<code>Default</code> 或右大括号结束. 与在其他一些语言中找到的 switch 语句不同, 没有隐式的落下直通和不使用 <a href="Break.htm">Break</a>(除非用于跳出封闭循环).</p>
<p>由于所有实例都包含在同一个块中, 因此在一个实例中定义的标签可以是另一个案例的 <a href="Goto.htm">Goto</a> 的目标. 但是, 如果标签位于 <code>Case</code> 或 <code>Default</code> 的正上方, 则它将指向前一个实例的结尾, 而不是下一个实例的开头.</p>
<p><code>Default</code> 不需要列在最后.</p>

 <h2 id="Related">相关</h2>
<p><a href="IfExpression.htm">If (表达式)</a>, <a href="Else.htm">Else</a>, <a href="Block.htm">Blocks</a></p>

 <h2 id="examples">示例</h2>
<div class="ex" id="ExInput">
<p><a class="ex_number" href="#ExInput"></a> 这是一个有效的热键示例. 在 <a href="Input.htm">Input</a> 命令的文档中有一个使用 if-else-if 的功能相同的<a href="Input.htm#ExHotkey">示例</a>.</p>
<pre>~[::
Input, UserInput, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca
switch ErrorLevel
{
case "Max":
    MsgBox, You entered "%UserInput%", which is the maximum length of text.
    return
case "Timeout":
    MsgBox, You entered "%UserInput%" at which time the input timed out.
    return
case "NewInput":
    return
default:
    if InStr(ErrorLevel, "EndKey:")
    {
        MsgBox, You entered "%UserInput%" and terminated the input with %ErrorLevel%.
        return
    }
}
switch UserInput
{
case "btw":   Send, {backspace 4}by the way
case "otoh":  Send, {backspace 5}on the other hand
case "fl":    Send, {backspace 3}Florida
case "ca":    Send, {backspace 3}California
case "ahk":   Run, https://www.autohotkey.com
}
return
</pre>
</div>

 </body>
</html>